////////////////////////////////////////////////////////////////////////////////

#ifndef _MOVINGOBJECT_H_
#define _MOVINGOBJECT_H_

////////////////////////////////////////////////////////////////////////////////

#include "object.h"

////////////////////////////////////////////////////////////////////////////////


/** Base class for all object that can move
*
*  @author   Roman Pasechnik
*  @since    Jun 04th, 2009
*  @updated  Jun 09th, 2009
*/
class MovingObject : public Object
{
////////////////////////////////////////////////////////////////////////////////

public:

////////////////////////////////////////////////////////////////////////////////


    /** Constructor */
    MovingObject();


    /** Destructor */
    virtual ~MovingObject();


////////////////////////////////////////////////////////////////////////////////


    /** Gets the velocity of moving object */
    STM::Velocity GetVelocity() const;


    /** Sets the velocity of moving object */
    void SetVelocity( const STM::Velocity& _velocity );


    /** Gets |velocity| in one dimensional case */
    double GetAbsoluteVelocity() const;


    /** Sets |velocity| in one dimensional case */
    void SetAbsoluteVelocity( double _absVelocity );


    /** Moves itself */ 
    void Move();


////////////////////////////////////////////////////////////////////////////////

private:

////////////////////////////////////////////////////////////////////////////////


    /** Moving object's velocity */
    STM::Velocity m_Velocity;


    /** Moving object's |velocity| in one dimensional case */
    double m_AbsoluteVelocity;


////////////////////////////////////////////////////////////////////////////////
};


////////////////////////////////////////////////////////////////////////////////

#endif

////////////////////////////////////////////////////////////////////////////////
